package com.example.demo.client;

import com.example.demo.client.evt.sysbasequery.*;
import com.example.demo.client.vm.sysbasequery.*;
import com.example.demo.domain.Code;
import com.example.demo.domain.ResourceEntity;
import com.ffcs.oss.param.out.ServiceResp;
import com.ffcs.oss.param.vm.QueryPageVm;
import com.example.demo.web.rest.evt.ArticleCatalogIdEvt;
import com.example.demo.web.rest.evt.IdEvt;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;
import java.util.Map;

/**
 * Description:
 *
 * @Author zmf
 * @Date 2018/12/4  10:07
 */
@AuthorizedFeignClient(name = "sysBaseQuery")
public interface SysBaseQueryClient {

    /**********************用户管理查询接口**************************/
    @ApiOperation(value = "查询用户ID")
    @PostMapping("/api/user/getUserIdByLoginName")
    ServiceResp<Long> getUserIdByLoginName(@RequestBody LoginNameEvt evt);

    @ApiOperation("用户管理下拉框取数接口")
    @PostMapping("/api/user/getUserStaticData")
    ServiceResp<UserStaticDataVm> getUserStaticData();

    @ApiOperation("查询用户信息")
    @PostMapping("/api/user/queryUser")
    ServiceResp<QueryPageVm<QueryUserVm>> queryUser(@RequestBody QueryUserEvt evt);

    @ApiOperation(value = "是否可以编辑用户",notes = "判断对应用户是否为超级管理员或是否为当前用户")
    @PostMapping("/api/user/isEditUser")
    ServiceResp<Boolean> isEditUser(@RequestBody IsEditUserEvt evt);

    @ApiOperation("用户名是否存在")
    @PostMapping("/api/user/isUserNameExist")
    ServiceResp<Boolean> isUserNameExist(@RequestBody IsUserNameExistEvt evt);

    @ApiOperation("根据ID获取用户信息")
    @PostMapping("/api/user/getUserById")
    ServiceResp<UserVm> getUserById(@RequestBody UserIdEvt evt);

    @ApiOperation("用户管理获取角色树")
    @PostMapping("/api/user/getRoleTree")
    ServiceResp<List<RoleTreeVm>> getRoleTreeOfUser(@RequestBody UserIdEvt evt);

    @ApiOperation("用户管理功能权限树")
    @PostMapping("/api/user/getPermissionTree")
    ServiceResp<List<PermissionTreeVm>> getPermissionTree(@RequestBody UserIdEvt evt);

    @ApiOperation("用户管理批量赋权树")
    @PostMapping("/api/user/getBatchPermissionTree")
    ServiceResp<List<PermissionTreeVm>> getBatchPermissionTree(@RequestBody UserIdsEvt evt);

    @ApiOperation("用户管理资源权限树")
    @PostMapping("/api/user/getResourceTree")
    ServiceResp<List<ResourceEntity>> getResourceTreeOfUser(@RequestBody ResourceTreeOfUserEvt evt);

    @ApiOperation("获取用户组树")
    @PostMapping("/api/user/getGroupTree")
    ServiceResp<List<UserGroupTreeVm>> getGroupTreeOfUser(@RequestBody UserGroupTreeEvt evt);

    @ApiOperation("查询用户总数")
    @PostMapping("/api/user/totalUser")
    ServiceResp<Long> totalUser();

    /**********************用户组管理查询接口**************************/
    @ApiOperation("获取用户组树")
    @PostMapping("/api/usergroup/getGroupTree")
    ServiceResp<List<UserGroupTreeVm>> getGroupTreeOfGroup(@RequestBody UserGroupTreeEvt evt);

    @ApiOperation("获取用户组下拉框数据")
    @PostMapping("/api/usergroup/getUserGroupStaticData")
    ServiceResp<UserGroupStaticDataVm> getUserGroupStaticData();

    @ApiOperation("根据ID获取用户组信息")
    @PostMapping("/api/usergroup/getGroupById")
    ServiceResp<UserGroupVm> getGroupById(@RequestBody @Validated IdEvt evt);

    @ApiOperation("获取用户组管理角色树")
    @PostMapping("/api/usergroup/getRoleTree")
    ServiceResp<List<RoleTreeVm>> getRoleTreeOfGroup(@RequestBody @Validated GetTreeOfGroupEvt evt);

    @ApiOperation("获取用户组管理功能权限树")
    @PostMapping("/api/usergroup/getPermissionTree")
    ServiceResp<List<PermissionTreeVm>> getPermissionTreeOfUserGroup(@RequestBody @Validated GetTreeOfGroupEvt evt);

    @ApiOperation("是否可以删除用户组")
    @PostMapping("/api/usergroup/isCanDelUserGroup")
    ServiceResp<Boolean> isCanDelUserGroup(@RequestBody @Validated IdEvt evt);

    @ApiOperation("用户组是否同名")
    @PostMapping("/api/usergroup/isGroupNameEqual")
    ServiceResp<Boolean> isGroupNameEqual(@RequestBody @Validated IsGroupNameEqualEvt evt);

    @ApiOperation("根据id获取fullGroupId")
    @PostMapping("/api/usergroup/getFullGroupIdByGroupId")
    ServiceResp<String>  getFullGroupIdByGroupId(@RequestBody @Validated IdEvt evt);

    @ApiOperation("用户管理资源权限树")
    @PostMapping("/api/usergroup/getResourceTree")
    ServiceResp<List<ResourceEntity>> getResourceTreeOfGroup(@RequestBody ResourceTreeOfGroupEvt evt);

    /**********************角色管理查询接口**************************/
    @ApiOperation("角色管理获取目录树")
    @PostMapping("/api/role/getDirectoryTree")
    ServiceResp<List<RoleTreeVm>> getDirectoryTree();

    @ApiOperation("角色管理获取角色目录树")
    @PostMapping("/api/role/getRoleTree")
    ServiceResp<List<RoleTreeVm>> getRoleTree(@RequestBody LoginNameEvt evt);

    @ApiOperation("角色管理获取角色目录信息")
    @PostMapping("/api/role/getRoleTreeMenu")
    ServiceResp<List<RoleTreeVm>> getRoleTreeMenu(@RequestBody LoginNameEvt evt);

    @ApiOperation("获取角色管理下拉框数据")
    @PostMapping("/api/role/getRoleStaticData")
    ServiceResp<RoleStaticDataVm> getRoleStaticData();

    @ApiOperation("根据ID获取角色基本信息")
    @PostMapping("/api/role/getRoleById")
    ServiceResp<RoleVm> getRoleById(@RequestBody IdEvt evt);

    @ApiOperation("是否可以编辑角色，非管理员时判断当前用户是否自己创建,只能编辑自己创建的角色或目录")
    @PostMapping("/api/role/isEditRole")
    ServiceResp<Boolean> isEditRole(@RequestBody IdEvt evt);

    @ApiOperation("是否可以删除角色")
    @PostMapping("/api/role/isCanDelRole")
    ServiceResp<Boolean> isCanDelRole(@RequestBody isCanDelRoleEvt evt);

    @ApiOperation("角色名称是否存在")
    @PostMapping("/api/role/isRoleNameExist")
    ServiceResp<Boolean> isRoleNameExist(@RequestBody isRoleNameExistEvt evt);

    @ApiOperation("获取角色全量ID")
    @PostMapping("/api/role/getFullRoleId")
    ServiceResp<String> getFullRoleId(@RequestBody IdEvt evt);

    @ApiOperation("角色关联用户查询")
    @PostMapping("/api/role/getRoleRelateUser")
    ServiceResp<QueryPageVm<GetRoleRelateUserVm>> getRoleRelateUser(@RequestBody GetRoleRelateUserEvt evt);

    @ApiOperation("角色管理功能权限树")
    @PostMapping("/api/role/getPermissionTree")
    ServiceResp<List<PermissionTreeVm>> getPermissionTree(@RequestBody IdEvt evt);

    /**********************登录日志、系统日志和操作日志查询接口**************************/
    @ApiOperation("查询登录日志")
    @PostMapping("/api/log/queryLoginLog")
    ServiceResp<QueryPageVm<LoginLogVm>> queryLoginLog(@RequestBody LoginLogEvt evt);

    @ApiOperation("是否可以导出登录日志")
    @PostMapping("/api/log/isCanExportLoginLog")
    ServiceResp<Boolean> isCanExportLoginLog(@RequestBody LoginLogEvt evt);

    @ApiOperation("今日登录用户数")
    @PostMapping("/api/log/todayLoginUser")
    ServiceResp<Long> todayLoginUser();

    @ApiOperation("查询系统日志")
    @PostMapping("/api/log/queryLog")
    ServiceResp<QueryPageVm<LogVm>> queryLog(@RequestBody QueryLogEvt evt);

    @ApiOperation("是否可以导出系统日志")
    @PostMapping("/api/log/isCanExportLog")
    ServiceResp<Boolean> isCanExportLog(@RequestBody QueryLogEvt evt);

    @ApiOperation("查询操作日志")
    @PostMapping("/api/log/queryOperateLog")
    ServiceResp<QueryPageVm<OperateLogVm>> queryOperateLog(@RequestBody QueryOperateLogEvt evt);

    @ApiOperation("是否可以导出操作日志")
    @PostMapping("/api/log/isCanExportOperateLog")
    ServiceResp<Boolean> isCanExportOperateLog(@RequestBody QueryOperateLogEvt evt);

    /**********************系统常量查询接口**************************/
    @ApiOperation("根据key获取系统常量配置值")
    @PostMapping(value = "/api/systemConfig/getSystemConfigValueByKey")
    ServiceResp<String> getSystemConfigValueByKey(@RequestBody @Validated KeyEvt evt);

    @ApiOperation("更新所有系统常量")
    @PostMapping(value = "/api/systemConfig/refreshAll")
    ServiceResp refreshAllSystemConfig();

    @ApiOperation("查询系统常量")
    @PostMapping(value = "/api/systemConfig/querySystemConfig")
    ServiceResp<QueryPageVm<SystemConfigVm>> querySystemConfig(@RequestBody QuerySystemConfigEvt evt);

    /**********************URL配置查询接口**************************/
    @ApiOperation("刷新URL配置缓存")
    @PostMapping(value = "/api/urlConfig/refreshAll")
    ServiceResp refreshAllUrlConfig();

    @ApiOperation("查询URL配置")
    @PostMapping(value = "/api/urlConfig/queryUrlConfig")
    ServiceResp<QueryPageVm<UrlConfigVm>> queryUrlConfig(@RequestBody QueryUrlConfigEvt evt);

    /**********************字典值管理查询接口**************************/
    @ApiOperation("刷新字典值缓存")
    @PostMapping(value = "/api/code/refreshAll")
    ServiceResp refreshAllCode();

    @ApiOperation("查询字典值")
    @PostMapping(value = "/api/code/queryCode")
    ServiceResp<QueryPageVm<Code>> queryCode(@RequestBody QueryCodeEvt evt);

    @ApiOperation("通过列名和表名获取字典值")
    @PostMapping(value = "/api/code/getByColNameAndTableName")
    ServiceResp<List<CodeVm>> getByColNameAndTableName(@RequestBody QueryCodeListEvt evt);

    /**********************菜单管理查询接口**************************/
    @ApiOperation("根据id获取菜单的FullMenuId")
    @PostMapping(value = "/api/menu/getFullMenuIdById")
    ServiceResp<String> getFullMenuIdById(@RequestBody IdEvt evt);

    @ApiOperation("保存菜单前的检查")
    @PostMapping(value = "/api/menu/saveMenuChecked")
    ServiceResp<Boolean> saveMenuChecked(@RequestBody SaveMenuCheckedEvt evt);

    @ApiOperation("菜单查询接口")
    @PostMapping(value = "/api/menu/getMenuTreeByCondition")
    ServiceResp<List<MenuTreeVm>> getMenuTreeByCondition(@RequestBody MenuConditionEvt evt);

    @ApiOperation("菜单管理静态数据")
    @PostMapping(value = "/api/menu/getMenuStaticData")
    ServiceResp<MenuStaticDataVm> getMenuStaticData();

    @ApiOperation("子集的FULL_MENU_ID集合")
    @PostMapping(value = "/api/menu/getChildFullMenuIds")
    ServiceResp<List<FullMenuIdsVm>> getChildFullMenuIds(@RequestBody IdEvt evt);

    /**********************反馈管理查询接口**************************/
    @ApiOperation("反馈查询接口")
    @PostMapping("/api/feedback/queryFeedback")
    ServiceResp<QueryPageVm<FeedbackVm>> queryFeedback(@RequestBody QueryFeedbackEvt evt);

    /**********************用户托管管理查询接口**************************/
    @ApiOperation("获取某用户的所有托管记录")
    @PostMapping(value = "/api/trusteeship/getTrusteeshipOfUser")
    ServiceResp<List<UserTrusteeshipVm>> getTrusteeshipOfUser(@RequestBody TrusteeshipOfUserEvt evt);

    @ApiOperation("根据id获取托管信息")
    @PostMapping(value = "/api/trusteeship/getTrusteeshipById")
    ServiceResp<UserTrusteeshipVm> getTrusteeshipById(@RequestBody IdEvt evt);

    @ApiOperation("查询托管信息")
    @PostMapping(value = "/api/trusteeship/queryTrusteeship")
    ServiceResp<QueryPageVm<QueryUserTrusteeshipVm>> queryTrusteeship(@RequestBody QueryTrusteeshipEvt evt);

    /**********************帮助文章管理查询接口**************************/
    @ApiOperation("查询文章")
    @PostMapping("/api/article/queryArticle")
    ServiceResp<QueryPageVm<ArticleVm>> queryArticle(@RequestBody QueryArticleEvt evt);

    @ApiOperation("查询文章关联的所有目录名称")
    @PostMapping("/api/article/getCatalogNamesByArticleId")
    ServiceResp<CatalogNameVm> getCatalogNamesByArticleId(@RequestBody IdEvt evt);

    @ApiOperation("查询文章内容详情")
    @PostMapping("/api/article/getArticleContentById")
    ServiceResp<ArticleContentVm> getArticleContentById(@RequestBody IdEvt evt);

    /**********************帮助目录管理管理查询接口**************************/
    @ApiOperation("查询可添加文章查询列表参数")
    @PostMapping("/api/catalog/queryAddibleArticles")
    ServiceResp<QueryPageVm<AddibleArticleVm>> queryAddibleArticles(@RequestBody AddibleArticleEvt evt);

    @ApiOperation("获取目录树")
    @PostMapping("/api/catalog/getCatalogTree")
    ServiceResp<List<CatalogTreeVm>> getCatalogTree();

    @ApiOperation("根据id获取FullCatalogId")
    @PostMapping("/api/catalog/getFullCatalogIdById")
    ServiceResp<String> getFullCatalogIdById(@RequestBody IdEvt evt);

    @ApiOperation("帮助目录管理查询文章")
    @PostMapping("/api/catalog/queryArticle")
    ServiceResp<QueryPageVm<QueryArticleVm>> queryArticle(@RequestBody QueryArticleCatalogEvt evt);

    @ApiOperation("目录是否有子节点")
    @PostMapping("/api/catalog/hasChild")
    ServiceResp<Boolean> hasChild(@RequestBody IdEvt evt);

    @ApiOperation("文章目录是否有关系")
    @PostMapping("/api/catalog/hasRelation")
    ServiceResp<Boolean> hasRelation(@RequestBody ArticleCatalogIdEvt evt);

    /**********************帮助管理查询接口**************************/
    @ApiOperation("菜单管理的帮助目录树(选中菜单关联的目录)")
    @PostMapping("/api/help/getHelpCatalogTree")
    ServiceResp<List<HelpCatalogVm>> getHelpCatalogTree(@RequestBody NameEnEvt evt);

    @ApiOperation("帮助中心当前菜单下的帮助目录树")
    @PostMapping("/api/help/getHelpCatalogAndArticle")
    ServiceResp<List<HelpCatalogArticleVm>> getHelpCatalogAndArticle(@RequestBody NameEnEvt evt);

    /**********************日志统计查询接口**************************/
    @ApiOperation("获取日志统计数据")
    @PostMapping(value = "/api/logStatistic/getLogStatisticsData")
    ServiceResp<LogStatisticsDataVm> getLogStatisticsData();

    @ApiOperation("用户个人功能使用TOP10下钻数据")
    @PostMapping(value = "/api/logStatistic/getUserFunctionUseTop10Drill")
    ServiceResp<HistogramVm>  getUserFunctionUseTop10Drill(@RequestBody LogStatisticEvt evt);

    @ApiOperation("系统功能TOP10使用下钻数据")
    @PostMapping(value = "/api/logStatistic/getFunctionUseTop10Drill")
    ServiceResp<HistogramVm> getFunctionUseTop10Drill(@RequestBody LogStatisticEvt evt);

    /**********************区域接口**************************/
    @ApiOperation("获得区域树：当前用户为超级管理员显示全部数据；当前用户为普通用户：显示当前用户所属区域及其子节点。")
    @PostMapping("/api/region/getRegionTree")
    ServiceResp<List<QueryRegionListVm>> getRegionTree(@RequestBody LoginNameEvt evt);

    @ApiOperation("获取区域信息-用户管理")
    @PostMapping("/api/region/getRegion")
    ServiceResp<Map> getRegion(@RequestBody GetRegionEvt evt);

}
